/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.unicon.autoservicio.view.bean;

import com.icesoft.faces.component.gmap.GMapLatLng;
import java.util.Date;
import com.unicon.autoservicio.bean.DespachoCSViewBean;
import com.unicon.autoservicio.dao.PedidoDAO;
import com.unicon.autoservicio.util.Util;
import com.unicon.sdc.ds.ws.DespachosCSBean;
import com.unicon.sdc.ds.ws.TruckLocationBean;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.event.PhaseId;
import javax.servlet.http.HttpServletRequest;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.XMLGregorianCalendar;

/**
 *
 * @author jmendoza
 */
public class ConsultaDespachoCSBean extends BaseManageBean {
    
    private String codigoObraSelected;
    private Date fechaPedidoDesde;
    private Date fechaPedidoHasta;
    private String orderCodeInput;
    private String mensajeDespachoCS;
    private List<DespachoCSViewBean> despachosVB;
    private List<DespachosCSBean> despachos;
    private List<TruckLocationBean> truckLocations;
    private List<GMapLatLng> latlngList;
    private boolean modalRenderedPopup = false;
    
    private String exportarPDF;
    
    //<editor-fold defaultstate="collapsed" desc="Constructor">
    public ConsultaDespachoCSBean() throws DatatypeConfigurationException, ParseException{
        codigoObraSelected = "";
        fechaPedidoDesde = new Date(System.currentTimeMillis());
        fechaPedidoHasta = new Date(System.currentTimeMillis());
        despachosVB = new ArrayList<>();
        latlngList = new ArrayList<>();
        
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        if(request!=null)
        {
            SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyy-MM-dd");
            
            String orderDate_s = (String)request.getAttribute("orderDate");
            String orderCode_ = (String)request.getAttribute("orderCode");
            
            if((orderDate_s!=null) && (orderCode_!=null) ){
                
                Date orderDate_d = formatoDelTexto.parse(orderDate_s);
                this.fechaPedidoDesde = orderDate_d;
                this.fechaPedidoHasta = orderDate_d;
                this.orderCodeInput = orderCode_;
                
                this.listaDespachos();
            }
        }
        
    }
    //</editor-fold>

    
    //<editor-fold defaultstate="collapsed" desc="Metodos">
    private boolean setMarcas(Date ordDate, String ordCode,String tktCod) throws DatatypeConfigurationException{
        
        if((ordDate!=null) && (ordCode!=null) ){
            
            // Generate a set of default map marker locations
            XMLGregorianCalendar orderDate;
            orderDate = Util.dateToXMLGregorian(ordDate);
            
            PedidoDAO pedidoDao = new PedidoDAO();
            
            truckLocations = pedidoDao.getTruckLocations(
                    orderDate,
                    ordCode,
                    tktCod,
                    "",
                    "");
            
            if(!(truckLocations.size() > 0)) { return false;}
            
            latlngList = new ArrayList<>();
            
            for (TruckLocationBean truckLocation : truckLocations) {
                String longitud = String.valueOf(truckLocation.getLongitud());
                String latitud = String.valueOf(truckLocation.getLatutud());
                
                //points.add(new GMapLatLng(longitud, latitud));
                
                latlngList.add(new GMapLatLng(longitud, latitud));
            }
            
            return true;
            
        }
        else{
            return false;
        }
        
    }
    
    private void listaDespachos() throws DatatypeConfigurationException{
        UsuarioBean usuarioBean = getSessionUser();
        
        XMLGregorianCalendar fecini, fecfin;
        fecini = Util.dateToXMLGregorian(getFechaPedidoDesde());
        fecfin = Util.dateToXMLGregorian(getFechaPedidoHasta());
        despachos = null;
        despachosVB = null;
        despachosVB = new ArrayList<DespachoCSViewBean>();
        PedidoDAO pedidoDao = new PedidoDAO();
        despachos = pedidoDao.getDespachosCS(
                usuarioBean.getCodigoUsuario(),
                usuarioBean.getCodigoCliente(),
                fecini,
                fecfin,
                getSelectedObra(),
                getOrderCodeInput(),
                /* JMENDOZA | 20140306 | Proy.817: Se agrega un parámetro mas */
                "2",
                usuarioBean.getCodigoUsuario(),
                usuarioBean.getClave());
        DespachoCSViewBean despachoVB = null;
        for (DespachosCSBean despacho : despachos) {
            
            despachoVB = new DespachoCSViewBean(despacho);
            
            getDespachosVB().add(despachoVB);
        }
    }
    
    
    public String getExportarPDF() {
        
        
        if(despachosVB.isEmpty() )
        {
            return "";
        }
        
        SimpleDateFormat sdfFecha = new SimpleDateFormat("dd/MM/yyyy");
        FacesContext fc = FacesContext.getCurrentInstance();
        UsuarioBean usuarioBean = getSessionUser(); 
              
        /*return fc.getExternalContext().getRequestContextPath() + "/ServletReportes?opcion=reportehistorico" +
         * "&tipo=pdf"  +
         * "&usu=" + usuarioBean.getCodigoUsuario() +
         * "&cli=" + usuarioBean.getCodigoCliente() +
         * "&feini=" + sdfFecha.format(fechaPedidoDesde)+
         * "&fefin=" + sdfFecha.format(fechaPedidoHasta) +
         * "&obr=" + codigoObraSelected +
         * "&ord=" + getOrderCodeInput() ;*/
        
        return fc.getExternalContext().getRequestContextPath() + "/ExportarPDF?reporte=ExportarReporteHistorico" +
          "&usu=" + usuarioBean.getCodigoUsuario() +
         "&cli=" + usuarioBean.getCodigoCliente() +
         "&feini=" + sdfFecha.format(fechaPedidoDesde)+
         "&fefin=" + sdfFecha.format(fechaPedidoHasta) +
         "&obr=" + codigoObraSelected +
         "&ord=" + getOrderCodeInput() ;
    }

    
    //</editor-fold>
    
    
    //<editor-fold defaultstate="collapsed" desc="Metodos ActionEvent">
    
    public boolean btnBuscarActionPerformed(ActionEvent event) throws DatatypeConfigurationException   {
        setMensajeDespachoCS("");
        
        if (!event.getPhaseId().equals(PhaseId.INVOKE_APPLICATION)) {
            event.setPhaseId(PhaseId.INVOKE_APPLICATION);
            event.queue();
            return true;
        }
        
        if (getFechaPedidoDesde().compareTo(getFechaPedidoHasta()) > 0) {
            setMensajeDespachoCS("La fecha Desde debe ser menor a la fecha Hasta.");
            return true;
        }
        
        this.listaDespachos();
        
        return true;
    }
    
    public void verMapa(ActionEvent event) throws DatatypeConfigurationException {
        Date orderDate_ = (Date)event.getComponent().getAttributes().get("dte");
        String orderCode_ = (String)event.getComponent().getAttributes().get("ord");
        String tktCode_ = (String)event.getComponent().getAttributes().get("tkt");
        
        modalRenderedPopup = setMarcas(orderDate_, orderCode_,tktCode_);
        
    }
    
    public void toggleModalPopup(ActionEvent event) {
        modalRenderedPopup = false;        
    }
        
    //</editor-fold>    
    
    
    //<editor-fold defaultstate="collapsed" desc="Getter and Setter">
    public String getCodigoObraSelected() {
        return codigoObraSelected;
    }
    
    public void setCodigoObraSelected(String codigoObraSelected) {
        this.codigoObraSelected = codigoObraSelected;
    }
    
    public Date getFechaPedidoDesde() {
        return fechaPedidoDesde;
    }
    
    public void setFechaPedidoDesde(Date fechaPedidoDesde) {
        this.fechaPedidoDesde = fechaPedidoDesde;
    }
    
    public Date getFechaPedidoHasta() {
        return fechaPedidoHasta;
    }
    
    public void setFechaPedidoHasta(Date fechaPedidoHasta) {
        this.fechaPedidoHasta = fechaPedidoHasta;
    }
    
    public String getMensajeDespachoCS() {
        return mensajeDespachoCS;
    }
    
    public void setMensajeDespachoCS(String mensajeDespachoCS) {
        this.mensajeDespachoCS = mensajeDespachoCS;
    }
    
    public List<DespachoCSViewBean> getDespachosVB() {
        return despachosVB;
    }
    
    public void setDespachosVB(List<DespachoCSViewBean> despachosVB) {
        this.despachosVB = despachosVB;
    }
    
    public List<DespachosCSBean> getDespachos() {
        return despachos;
    }
    
    public void setDespachos(List<DespachosCSBean> despachos) {
        this.despachos = despachos;
    }
    
     /**
     *
     * @return
     */
    public String getOrderCodeInput() {
        return orderCodeInput;
    }

    /**
     *
     * @param orderCodeInput
     */
    public void setOrderCodeInput(String orderCodeInput) {
        this.orderCodeInput = orderCodeInput;
    }
    
    public List<GMapLatLng> getLatlngList() {
        return latlngList;
    }
    
    public void setLatlngList(List<GMapLatLng> latlngList) {
        this.latlngList = latlngList;
    }  
    
    public boolean getModalRenderedPopup() {
        return modalRenderedPopup;
    }

    public void setModalRenderedPopup(boolean modalRenderedPopup) {
        this.modalRenderedPopup = modalRenderedPopup;
    }  
    

    public void setExportarPDF(String exportarPDF) {
        this.exportarPDF = exportarPDF;
    }

   
    //</editor-fold>
        
}
